VisualStudio&QT 动态库、静态库以及QT Plugin插件创建和加载方法

您所在的位置:网站首页 qt生成动态库 一个工程只能生成一个吗 VisualStudio&QT 动态库、静态库以及QT Plugin插件创建和加载方法

VisualStudio&QT 动态库、静态库以及QT Plugin插件创建和加载方法

2024-07-16 16:00| 来源: 网络整理| 查看: 265

一、动态库创建以及静态加载方法

1. 创建动态库

(1)编写好.h和.cpp文件

(2)项目->属性->配置属性->常规->配置类型(动态库.dll)

 

2. 动态库静态加载方法

(1)包含编写好的.h文件

(2)pragma comment(lib, "../../../../")后面问lib库所在的路径

#pragma comment(lib, "../x64/Debug/dynamicLibrary.lib")

 

二、动态库创建以及动态加载方法

1. 创建动态库

同上述

2. 动态库动态加载方法

(1)添加主程序入口函数

注意:

.lib可随意放置,使用时,指定正确的路径即可

放置.dll文件在和.exe文件同一目录下

1)使用Windows库函数加载dll

2)LoadLibraryA 加载dll

3)GetProcAddress 获取函数地址

4)FreeLibrary 释放句柄

代码示意main函数

#include"add.h" #include #include #include //#pragma comment(lib, "../x64/Debug/dynamicLibrary.lib") // 动态库静态加载 //动态库动态加载 int main() { HINSTANCE h = LoadLibraryA("dynamicLibrary.dll");//第一步 typedef int(*FunPtr)(int a, int b);//定义函数指针 if (h == NULL) { FreeLibrary(h); printf("load lib error\n"); } else { FunPtr funPtr = (FunPtr)GetProcAddress(h, "add");//第二步 if (funPtr != NULL) { int result = funPtr(8, 3); printf("8 + 3 =%d\n", result); } else { printf("get process error\n"); printf("%d", GetLastError()); } FreeLibrary(h);//第三步 } system("pause"); }

================================下面介绍QT中plugin插件的创建以及使用===============================

 

三、静态库创建以及加载方法

1. 创建静态库

1)编写好.h和.cpp文件

(2)项目->属性->配置属性->常规->配置类型(静态库.lib)

2. 静态库加载方法

(1)包含编写好的.h文件

(2)pragma comment(lib, "../../../../")后面问lib库所在的路径

 

=====================以下为QT中动态库以及静态库加载方法====================

一、QT动态库创建

1. projects->library->共享库,建立如下所示的项目

2. 头文件

//testdynamiclib.h #ifndef TESTDYNAMICLIB_H #define TESTDYNAMICLIB_H #include "testdynamiclib_global.h" class TESTDYNAMICLIBSHARED_EXPORT TestDynamicLib { public: TestDynamicLib(); void MyDynamicLib(); }; #endif // TESTDYNAMICLIB_H

3. .cpp文件

#include "testdynamiclib.h" TestDynamicLib::TestDynamicLib() { } void TestDynamicLib::MyDynamicLib() { qDebug("test dynamic lib !"); }

 

二、QT静态库创建

1. projects->library->静态链接库

2. 头文件

#ifndef TESTSTATICLIB_H #define TESTSTATICLIB_H #include class TestStaticLib { public: TestStaticLib(); void TestMyStaticLib(); }; #endif // TESTSTATICLIB_H

3. cpp文件

#include "teststaticlib.h" TestStaticLib::TestStaticLib() { } void TestStaticLib::TestMyStaticLib() { qDebug() = 0x050000 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QGenericPluginFactoryInterface" FILE "plugindemo.json") // 使用Q_PLUGIN_METEDATA() 宏导出这个插件 #endif // QT_VERSION >= 0x050000 Q_INTERFACES(QtPluginDemoInterface) // 使用Q_INTERFACE() 宏告诉Qt元对象系统这个插件实现了哪些接口 public: explicit plugindemo(QObject *parent = nullptr); virtual void printMessage(const QString& message) override; }; #endif // PLUGINDEMO_H

cpp文件

// plugindemo.cpp #include "plugindemo.h" #include plugindemo::plugindemo(QObject *parent) : QObject(parent) { } void plugindemo::printMessage(const QString &message) { //在派生类中实现打印函数 qDebug() printMessage("hahahaha")); qDebug() printMessage("success"); } } delete obj; } else { qDebug()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3